<?php

class PersistenciaPrivilegio extends Persistencia {

    protected function setRelacionamento() {
        $this->setTabela('tbprivilegio');
        $this->addRelacionamento('funtipoacesso','tipoAcesso',true);
        $this->addRelacionamento('forrotina','rotinaFormulario',true);
        $this->addRelacionamento('foracao', 'acaoFormulario',true);
    }
    
    public function getSqlPadraoConsulta() {
        $aListaTipoAcesso = PersistenciaFuncionario::getListaTipoAcesso();
        $aSelect = array();
        foreach ($aListaTipoAcesso as $oLista) {
            $aSelect[] = "select '{$oLista->getChave()}' as funtipoacesso, '{$oLista->getDescricao()}' as funtipoacessodesc ";
        }
        return implode(' union ', $aSelect);
    }
    
    public function excluiAllTipoAcesso($tipoAcesso) {
        $oQuery  = $this->newQuery();
        $sDelete = "delete from ".$this->getTabela(true)."
                     where funtipoacesso = ".$tipoAcesso;
        $oQuery->setSql($sDelete);
        return $oQuery->execute();    
    }
    
    /**
     * @param type $tipoAcesso
     * @return ModelPrivilegio[]
     */
    public function getAllTipoAcesso($tipoAcesso) {
        $aResult = array();
        $sSelect = "select formulario.forrotina, 
                           formulario.foracao, 
                           formulario.fortitulo,
                           case when tbprivilegio.funtipoacesso is not null then 1 else 0 end as privilegio 
                      from formulario 
                 left join tbprivilegio 
                        on tbprivilegio.forrotina = formulario.forrotina
                       and tbprivilegio.foracao = formulario.foracao
                       and tbprivilegio.funtipoacesso = ".$tipoAcesso." 
                  order by formulario.forrotina, 
                           formulario.fortitulo";
        $oQuery  = $this->newQuery($sSelect);
        $oQuery->execute();
        while ($oRes = $oQuery->fetchObject()) {
            $oModel = new ModelPrivilegio();
            $this->persisteObjetoFromFetch($oRes, $oModel);
            $oModel->getFormulario()->setTitulo($oRes->fortitulo);
            $oModel->setAcesso(($oRes->privilegio == '1'));
            $aResult[] = $oModel;
        } 
        return $aResult;
    }
    
    static public function possuiPrivilegio(ModelFormulario $oFormulario) {
        static $oPersistencia;
        if (!isset($oPersistencia)) {
            $oPersistencia = new PersistenciaPrivilegio(new ModelPrivilegio());            
        }
        $oPrivilegio = $oPersistencia->getModel();
        $oPrivilegio->setFormulario($oFormulario);
        $oPrivilegio->setTipoAcesso(Principal::getInstance()->getUsuario()->getTipoAcesso());
        if ($oPersistencia->buscaDados()) {
            return true;
        }
        return false;
    }

}
